package com.pb.wkflow.core.service;

import com.pb.wkflow.api.controller.response.TaskResponse;
import com.pb.wkflow.api.entity.ParticipantUserEntity;
import com.pb.wkflow.core.camunda.bpmn.instance.Participants;
import com.pb.wkflow.core.entity.ActRuIdentityLinkEntity;
import com.pb.wkflow.core.entity.PostInfo;
import org.camunda.bpm.engine.delegate.DelegateTask;

import java.util.List;
import java.util.Map;

/**
 * @author 苗益辉
 * @date 2022/5/9 14:17
 */
public interface UserParticipantService {

    /**
     * 保存任务处理人信息
     * @param delegateTask delegateTask
     * @param userId 处理人id
     */
    void saveUserTaskAssignment(DelegateTask delegateTask, String... userId);

    /**
     * 保存任务处理人信息
     * @param delegateTask delegateTask
     * @param postInfo 处理人信息
     */
    void saveUserTaskAssignment(DelegateTask delegateTask, PostInfo postInfo) ;

    /**
     * 保存任务处理人信息
     * @param response response
     * @param postInfos 处理人信息
     */
    void saveUserTaskAssignment(TaskResponse response, List<PostInfo> postInfos);

    /**
     * 保存任务处理人信息
     * @param delegateTask delegateTask
     * @param postInfos 处理人信息列表
     */
    void saveUserTaskAssignment(DelegateTask delegateTask, List<PostInfo> postInfos);

    /**
     * 解析参与者
     * @param participants 参与者实体
     * @param postInfo postInfo
     * @param variables 流程变量
     */
    void getParticipants(Participants participants, PostInfo postInfo, Map<String, Object> variables);

    /**
     * 根据任务id删除当前参与者
     * @param taskId 任务id
     */
    void deleteRuIdentityLink(String taskId);

    /**
     * 获取处理人
     * @param taskId 任务id
     * @param tenantId 租户id
     * @return List<ActRuIdentityLinkEntity>
     */
    List<ActRuIdentityLinkEntity> getAssignee(String taskId, String tenantId);

    /**
     * 根据postInfos 查询待办用户列表
     * @param postInfos postInfos
     * @return List<ParticipantUserEntity>
     */
    List<ParticipantUserEntity> findUserByParticipants(List<PostInfo> postInfos);
}
